昨天我們已經把 Docker 安裝完成,並且也把 Service 執行起來了,今天就用一個簡單的例子來體驗 Docker 的command line要如何操作。
實作目標就是先從 Docker Hub 上把 Ubuntu OS 的 image pull 到 local,有了 image 之後就可以把 Docker container 執行起來,然後進入到 container 裡面安裝和啟動 Apache 的 HTTP Service,並且寫一個有 HelloWorld 字串的 HTML 檔案。最後使用 Browser 連到 Docker Container 裡面的 HTTP Service,確認 HelloWorld 的字串能正常的顯示出來。
一.從 Docker Hub下載 Ubuntu 的 Docker Image 到 local
1.要下載 Docker Image 之前需要先搜尋一下,Docker Image 的 Name 是什麼,指令如下:
指令如下:
$ docker search ubuntu -f is-official=true
is-official=true
表示要搜尋是官方的 Docker image
搜尋結果如下圖
就選擇星星數最多的 Name 為 ubuntu
2.找到了 ubuntu 的 Docker Image Name 之後,就可以把此 image pull 下來,指令如下:
$ docker pull ubuntu
執行結果如下圖
3.要再一次確認 ubuntu 的docker image有沒有下載下來,可以使用以下的指令
$ docker images
如下圖
二. 有了 Docker Image 之後就可以把 container 執行起來了並且進入 Docker Container 的 terminal 裡面,指令如下
$ docker run -it ubuntu /bin/bash
使用以上的指令就可以進入了docker container 裡面的 terminal
可以再打開另外一個terminal視窗,輸入以下指令
$ docker ps -a
確認 docker container 有正常的執行,如下圖:
在要離開 docker container 的 terminal 時有一個坑。就是如果輸入 exit 指令時,container 會被關閉,如下圖:
如果不要停止 container 而要退出 docker container 的terminal 需要輸入ctrl + p
之後再輸入 ctrl + q
的按鍵,就不會把 container 關閉。
三. 在 docker container 裡面安裝和啟動 apache 的 http service ,指令如下
root@a52350de4ffa:/# apt-get update
root@a52350de4ffa:/# apt-get install -y apache2
root@a52350de4ffa:/# service apache2 start
簡單寫一個 hellowolrd.html檔案放在 /var/www/html
的路徑下,指令如下
root@a52350de4ffa:/# echo "HelloWorld" > /var/www/html/helloworld.html
使用cat /etc/hosts
指令查看 docker container 的 IP 如下圖:
如果想要使用 ifconfig
指令,需要安裝 net-tools工具指令如下
root@a52350de4ffa:/# apt-get install -y net-tools
**四. 使用 browser 輸入 http://172.17.0.2/helloworld.html 的 URL 查看 helloworld.html 的檔案是否能正常的顯示,畫面如下: **
整理一下今天有使用到的 Docker 指令如下:docker search
搜尋 Docker Image 有哪些的指令docker pull
指 Docker Image 下載回 localdocker images
顯示出在 local 下載了哪些 Docker Imagedocker run
使用 Docker Image 啟動執行 Docker Containerdocker ps
顯示了啟動了哪些的 Docker Container
今天主要的目的是要讓大家簡單的來體驗一下 Docker 指令要如何的使用,其實這之間還有很多的細節還沒有被提到,像是要如何撰寫Dockerfile 讓操作更自動化、如何Build image、 container 的網路設定……等等的內容,在未來都還會再提到。
windows 10 上看起來預設是無法直接存取內部 ip 的,需加上 route
route /P add 172.17.0.0 MASK 255.255.255.0 10.0.75.2
請問你這是什麼意思?
呃,就如字面上的意思,是無法直接存取的,你用 windows 10 試試應該就知道了
rockywang
我已經有下這個指令在Win10 中了
而且他也有顯示位置在持續路由裡了
可是我的還是連不到自己的網站
yangj26952
我也關閉防火牆試試看了 但也沒有用
apache2有成功打開
最近正在學習
碰到這問題卡住
請問大大有沒有其他方法解決
OS:Win10(家用版 沒有Hyper-V)
Docker工具:DockerToolbox-19.03.1
我覺得學習可以先安裝 VirtualBox 或是其它的 VM 工具,然後在上面安裝 Linux 作業系統如 CentOS, 然後記得要把網路設定成 bridge, 之後就可以在 VM 上練習 docker。
因為上面 sample 都是在 linux 上環境做的,所以 windows 的部份我沒有測試過, docker 在 windows 的 support 應該也沒有很完整(我不太確定),所以建議最好要使用 Linux 來練習。
好的
那我去裝VM哈哈
我其實是建議直接找台機器裝 linux 練習比較不會碰到一堆奇怪的問題
docker run -it ubuntu /bin/bash
這步驟沒問題
root@a52350de4ffa:/# apt-get update
這步驟會產生錯誤...我發覺是docker這邊的時間錯誤.1970年
我嘗試改 date -s ,但系統不讓我改
請問.如何解決
有沒有詳細的錯誤訊息,這樣才能找到問題
我再重新把安裝過程跟問題整理一下,再發問一次??謝謝
ok
請問大大我也有無法連線應時間過長的問題,我的本機環境是m1 mac pro。
由於我使用了cat /etc/hosts,查出Ip為172.17.0.3,因此我是使用 http://172.17.0.3/helloworld.html
嘗試:
1.將防火牆關閉,也將Chrome的不安全內容設為允許
2.使用Ping 172.17.0.3,查看看是不是docker出問題,預計會出現unreachable,卻是出現Request timeout for icmp_seq 0,但卻沒有連線時間等資訊。
想請問有哪些方向是我可以去思考的解決方向嗎?該如何解決呢?
在 macOS 上跑 Docker Desktop,需要做 port mapping 才能正常測試 apache:
docker run -p 8000:80 -it ubuntu /bin /bash
@yangj26952 不做端口Docker Container的端口映射到Host,就會訪問不到Container里 apache開放的80端口。測試不通,會勸退很多人繼續學習Docker。
所以如果 @yangj26952 還有機會修改這篇文章的話,建議把docker run -it ubuntu /bin/bash
改為docker run -p 80:80 -it ubuntu /bin/bash
只需要訪問 http://localhost:80/helloworld.html
就行,訪問 http://127.0.0.1/helloworld.html
也行。
這機就不會訪問 http://172.17.0.2/helloworld.html 沒有響應了。